package com.kalvan.core.mybatis;

import com.github.pagehelper.Page;
import org.apache.ibatis.exceptions.TooManyResultsException;
import tk.mybatis.mapper.entity.Condition;

import java.util.List;
import java.util.Map;

/**
 * 继承自己的MyMapper 特别注意，该接口不能被扫描到，否则会出错
 *
 * @param <T>
 * @author chenliang
 */
public interface IBaseService<T> {

    /**
     * 新增
     *
     * @param model
     * @return
     */
    int add(T model);

    /**
     * 批量新增
     *
     * @param models
     * @return
     */
    int add(List<T> models);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    int delete(Object id);

    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    int deleteBatch(Object[] ids);

    /**
     * 批量审核
     *
     * @param ids
     * @param pass
     * @return
     */
    int auditingBatch(Object[] ids, boolean pass);

    /**
     * 修改
     *
     * @param model
     * @return
     */
    int edit(T model);

    /**
     * 主键查找
     *
     * @param id 主键
     * @return
     */
    T findById(Object id);

    /**
     * 通过Model中某个成员变量名称（非数据表中column的名称）查找,value需符合unique约束
     *
     * @param fieldName
     * @param value
     * @return
     * @throws TooManyResultsException
     */
    T findBy(String fieldName, Object value) throws TooManyResultsException;

//    /**
//     * 通过多个ID查找//eg：ids -> “1,2,3,4”
//     *
//     * @param ids
//     * @return
//     */
//    List<T> findByIds(Long[] ids);

    /**
     * 根据条件查找
     *
     * @param condition
     * @return
     */
    List<T> findByCondition(Condition condition);

    /**
     * 获取所有
     *
     * @return
     */
    List<T> findAll();

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return List
     */
    Page queryPage(PageInfo page, Map<String, String> params);

    /**
     * 查询汇总
     *
     * @param params 查询参数
     * @return Map
     */
    Map<String, String> querySum(Map<String, String> params);
}